package com.yoake.campus.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import com.yoake.campus.domain.CampusFile;
import com.yoake.campus.domain.vo.CampusContentVo;
import com.yoake.campus.mapper.CampusFileMapper;
import com.yoake.common.utils.DateUtils;
import com.yoake.common.utils.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yoake.campus.mapper.CampusContentMapper;
import com.yoake.campus.domain.CampusContent;
import com.yoake.campus.service.ICampusContentService;

/**
 * 内容管理Service业务层处理
 *
 * @author yoake
 * @date 2024-12-10
 */
@Service
public class CampusContentServiceImpl implements ICampusContentService {
    private static final Logger log = LoggerFactory.getLogger(CampusContentServiceImpl.class);
    @Autowired
    private CampusContentMapper campusContentMapper;

    @Autowired
    private CampusFileMapper campusFileMapper;

    /**
     * 查询内容管理
     *
     * @param contentId 内容管理主键
     * @return 内容管理
     */
    @Override
    public CampusContentVo selectCampusContentVoByContentId(Long contentId) {
        return campusContentMapper.selectCampusContentVoByContentId(contentId);
    }

    /**
     * 查询内容管理列表
     *
     * @param campusContent 内容管理
     * @return 内容管理
     */
    @Override
    public List<CampusContentVo> selectCampusContentList(CampusContent campusContent) {
        return campusContentMapper.selectCampusContentList(campusContent);
    }

    /**
     * 新增内容管理
     *
     * @param campusContentvo 内容管理
     * @return 结果
     */
    @Override
    public int insertCampusContent(CampusContentVo campusContentvo) {
        // 获取当前登录用户的ID
        Long userId = SecurityUtils.getUserId();
        // 获取文件数量
        List<String> fileList = campusContentvo.getFileList();
        int fileCount = (fileList != null) ? fileList.size() : 0;

        campusContentvo.setFileCount(Long.valueOf(fileCount));
        campusContentvo.setCreateUser(userId);
        campusContentvo.setCreateTime(DateUtils.getNowDate());
        int result = campusContentMapper.insertCampusContent(campusContentvo);
        // 获取插入后生成的主键值
        Long contentId = campusContentvo.getContentId();
        if (campusContentvo.getType() != 0) {
            List<CampusFile> campusFiles = campusContentvo.getFileList().stream()
                    .map(url -> {
                        CampusFile campusFile = new CampusFile();
                        campusFile.setContentId(contentId);
                        campusFile.setUserId(userId);
                        campusFile.setUrl(url);
                        campusFile.setCreateTime(DateUtils.getNowDate());
                        return campusFile;
                    })
                    .collect(Collectors.toList());
            campusFileMapper.batchInsertCampusFile(campusFiles);
        }

        return result;
    }

    /**
     * 修改内容管理
     *
     * @param campusContentvo 内容管理
     * @return 结果
     */
    @Override
    public int updateCampusContent(CampusContentVo campusContentvo) {
        // 获取当前登录用户的ID
        Long userId = SecurityUtils.getUserId();
        // 获取文件数量
        int fileCount = campusContentvo.getFileList().size();

        campusContentvo.setFileCount(Long.valueOf(fileCount));
        campusContentvo.setUpdateUser(userId);
        campusContentvo.setUpdateTime(DateUtils.getNowDate());
        int result = campusContentMapper.updateCampusContent(campusContentvo);
        // 获取插入后生成的主键值
        Long contentId = campusContentvo.getContentId();
        campusFileMapper.deleteCampusFileByContentId(contentId);
        if (campusContentvo.getType() != 0) {
            List<CampusFile> campusFiles = campusContentvo.getFileList().stream()
                    .map(url -> {
                        CampusFile campusFile = new CampusFile();
                        campusFile.setContentId(contentId);
                        campusFile.setUserId(userId);
                        campusFile.setUrl(url);
                        campusFile.setCreateTime(DateUtils.getNowDate());
                        return campusFile;
                    })
                    .collect(Collectors.toList());
            campusFileMapper.batchInsertCampusFile(campusFiles);
        }

        return result;
    }

    /**
     * 批量删除内容管理
     *
     * @param contentIds 需要删除的内容管理主键
     * @return 结果
     */
    @Override
    public int deleteCampusContentByContentIds(Long[] contentIds) {
        return campusContentMapper.deleteCampusContentByContentIds(contentIds);
    }

    /**
     * 删除内容管理信息
     *
     * @param contentId 内容管理主键
     * @return 结果
     */
    @Override
    public int deleteCampusContentByContentId(Long contentId) {
        return campusContentMapper.deleteCampusContentByContentId(contentId);
    }
}
